package com.xqboss.apps.mapper.punch;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xqboss.apps.domain.punch.PunchUserRecord;
import com.xqboss.apps.vo.consumer.ConsumerTeamMsgRecordUserVo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * @author Trent
 * @date 2023/8/15
 */
public interface PunchUserRecordMapper extends BaseMapper<PunchUserRecord> {

    /**
     * 查询用户-打卡记录
     *
     * @param id 用户-打卡记录主键
     * @return 用户-打卡记录
     */
    public PunchUserRecord selectPunchUserRecordById(String id);

    /**
     * 查询用户-打卡记录列表
     *
     * @param punchUserRecord 用户-打卡记录
     * @return 用户-打卡记录集合
     */
    public List<PunchUserRecord> selectPunchUserRecordList(PunchUserRecord punchUserRecord);

    /**
     * 新增用户-打卡记录
     *
     * @param punchUserRecord 用户-打卡记录
     * @return 结果
     */
    public int insertPunchUserRecord(PunchUserRecord punchUserRecord);

    /**
     * 修改用户-打卡记录
     *
     * @param punchUserRecord 用户-打卡记录
     * @return 结果
     */
    public int updatePunchUserRecord(PunchUserRecord punchUserRecord);

    /**
     * 删除用户-打卡记录
     *
     * @param id 用户-打卡记录主键
     * @return 结果
     */
    public int deletePunchUserRecordById(String id);

    /**
     * 批量删除用户-打卡记录
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePunchUserRecordByIds(String[] ids);

    ConsumerTeamMsgRecordUserVo getRecordById(Long sourceId);

    /**
     * 获取用户队伍指定日期的总收益
     * @param userId
     * @param teamId
     * @param date
     * @return
     */
    BigDecimal getUserTotalIncome(@Param("userId") Long userId, @Param("teamId") Long teamId, @Param("date") LocalDate date);

    /**
     * 统计队伍指定日期打卡用户数量
     * @param teamId
     * @param date
     * @return
     */
    int countTeamPunchUser(@Param("teamId") Long teamId, @Param("date") LocalDate date);

    /**
     * 统计今日团队打卡次数
     *
     * @param teamId
     * @param localDate
     * @return
     */
    long countTeamTodayPunch(@Param("teamId") Long teamId, @Param("date") LocalDate localDate);
}
